package com.ruoyi.system.service;

import java.util.List;
import com.ruoyi.system.domain.ContractType;

/**
 * 合同类型Service接口
 * 
 * @author ruoyi
 */
public interface IContractTypeService 
{
    /**
     * 查询合同类型
     * 
     * @param typeId 合同类型主键
     * @return 合同类型
     */
    public ContractType selectContractTypeByTypeId(Long typeId);

    /**
     * 查询合同类型列表
     * 
     * @param contractType 合同类型
     * @return 合同类型集合
     */
    public List<ContractType> selectContractTypeList(ContractType contractType);

    /**
     * 构建前端所需要树结构
     * 
     * @param contractTypes 合同类型列表
     * @return 树结构列表
     */
    public List<ContractType> buildContractTypeTree(List<ContractType> contractTypes);

    /**
     * 新增合同类型
     * 
     * @param contractType 合同类型
     * @return 结果
     */
    public int insertContractType(ContractType contractType);

    /**
     * 修改合同类型
     * 
     * @param contractType 合同类型
     * @return 结果
     */
    public int updateContractType(ContractType contractType);

    /**
     * 删除合同类型信息
     * 
     * @param typeId 合同类型主键
     * @return 结果
     */
    public int deleteContractTypeByTypeId(Long typeId);

    /**
     * 校验合同类型名称是否唯一
     * 
     * @param contractType 合同类型信息
     * @return 结果
     */
    public String checkContractTypeNameUnique(ContractType contractType);

    /**
     * 是否存在合同类型子节点
     * 
     * @param typeId 合同类型ID
     * @return 结果
     */
    public boolean hasChildByContractTypeId(Long typeId);

    /**
     * 查询合同类型是否存在合同
     * 
     * @param typeId 合同类型ID
     * @return 结果
     */
    public boolean checkContractTypeExistContract(Long typeId);

    /**
     * 查询合同类型正常状态的子节点数量
     *
     * @param typeId 部门ID
     * @return 子节点数量
     */
    public int selectNormalChildrenContractTypeById(Long typeId);
}
